#include "Huevo.h"
#include "ActoresConstantes.h"
#include "UtilidadesConstantes.h"

using namespace TP::Juego::Arena::Actores;

Huevo::Huevo(): Actor("", new Rol (HUEVO, HUEVO)){
}

Huevo::Huevo(const string& pNombre): Actor(pNombre, new Rol (pNombre, HUEVO)) {
}

Huevo::~Huevo() {}

IColisionado* Huevo::colisionar (IColisionado* pColisionado){
    
    // Se verifica que haya algo para colisionar.
    if (!pColisionado) return pColisionado;
    
    // El huevito no se puede colisionar a si mismo.
    if (this == pColisionado) return pColisionado;
    
    if (pColisionado->getRol()->Nombre() == PERIMETRO)
    {
        return (IColisionado*) this->colisionarContraPerimetro ((Perimetro*)pColisionado);
    }
    else if (pColisionado->getRol()->Nombre() == CERDITO) {
        
    }
    else if (pColisionado->getRol()->Nombre() == MONTICULOHUEVOS) {
        
    }
    else if (pColisionado->getRol()->Descripcion() == PAJARITO) {
        
    }
    else if (pColisionado->getRol()->Descripcion() == PISO) {
        
    }
}

Perimetro* Huevo::colisionarContraPerimetro (Perimetro* pPerimetro){
    this->destruir();
    return pPerimetro;
}

//Pajarito* Huevo::colisionarContraPajarito(Pajarito *pPajarito) {
//    this->destruir();
//    return pPajarito;
//}

//Cerdito* Pajarito::colisionarContraCerdito(Cerdito* pCerdito) {
//    this->destruir;
//}
//
//MonticuloHuevos* Huevo::colisionarContraMonticuloHuevo(MonticuloHuevos* pMonticuloHuevos) {
//    this->destruir();
//return pMonticuloHuevos;
//}

//Caja* Huevo::colisionarContraCaja(Caja* pCaja) {
//    this->destruir();
//    return pCaja;
//}

//Fruta* Huevo::colisionarContraFruta(Fruta* fruta) {
//    this->destruir();
//    return pCaja;
//}

//Piso* Huevo::colisionarContraPiso(Piso* pPiso) {
//    this->destruir();
//    return pPiso;
//}


//Perimetro* Huevo::colisionarContraPerimetro(Perimetro *pPerimetro) {
//    this->destruir();
//    return pPerimetro;
//}

string Huevo::aXML(){

    TiXmlDocument* doc = new TiXmlDocument();
    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    doc->LinkEndChild( decl );
    
    doc->LinkEndChild(this->aElementoXML());

    TiXmlPrinter printer;
    doc->Accept(&printer);
    return printer.CStr();    
}

string Huevo::aXML(const string& pPath){

    TiXmlDocument* doc = new TiXmlDocument(pPath.c_str());
    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    doc->LinkEndChild( decl );
    
    doc->LinkEndChild(this->aElementoXML());
    
    TiXmlPrinter printer;
    doc->Accept(&printer);
    return printer.CStr();    
}

void Huevo::parseXML (const string& pDescriptor){

    TiXmlDocument doc;
    doc.Parse(pDescriptor.c_str(), 0, TIXML_ENCODING_UTF8);
    this->deElementoXML(doc.FirstChildElement());
}    